package com.bjtu.ptsite.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.bjtu.ptsite.model.TorrentComment;

import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;

/**
 *
 * @author Zehao Wang, Junjie Zhang, Yutao Wei
 *
 */
@Mapper
public interface TorrentCommentMapper extends BaseMapper<TorrentComment> {

    /**
     * 根据 torrentId 查询未删除的评论列表，并按点赞数降序排序。
     *
     * @param torrentId 种子文件的唯一标识符
     * @return 符合条件的 TorrentComment 列表
     * @throws IllegalArgumentException 如果 torrentId 为 null
     * @see TorrentComment
     */
    @Select( {"<script>" + " select * from torrent_comment where deleted = 0 and torrent_id =#{torrentId} order by likes desc " +
              "</script>"})
    List<TorrentComment> getCommentList(Long torrentId);

    /**
     * 根据评论 ID 增加对应评论的点赞数。
     *
     * <p>此方法会执行一个更新操作，将指定评论的 likes 字段值加 1。
     *
     * @param id 评论的唯一标识符
     * @throws IllegalArgumentException 如果 id 为 null
     * @see TorrentComment
     */
    @Update({"<script>" + " update torrent_comment set likes = likes + 1 where id = #{id} " +
              "</script>"})
    void incrrementLikes(Long id);

    /**
     * 根据评论 ID 减少对应评论的点赞数。
     *
     * <p>此方法会执行一个更新操作，将指定评论的 likes 字段值减 1。
     *
     * @param userId 评论的唯一标识符
     * @param id 如果 id 为 null
     * @see TorrentComment
     */
    @Select("SELECT COUNT(*) FROM comment_like WHERE user_id = #{userId} AND comment_id = #{id}")
    boolean likeExist(Long userId,Long id);

    /**
     * 根据评论 ID 减少对应评论的点赞数。
     * @param userId 评论的唯一标识符
     * @param id 评论的唯一标识符
     */
    @Insert("INSERT INTO comment_like(user_id, comment_id) VALUES(#{userId},#{id})")
    void createLike(Long userId,Long id);
}
